iT邦幫忙

2023 iThome 鐵人賽

DAY 21
0
自我挑戰組

Rails 手工打造自己的部落格 系列 第 21

Rails 手工打造自己的部落格 21 - 會員登入(上)

  • 分享至 

  • xImage
  •  

昨天處理完註冊的部分
因為在登入的 action 跟一般 resourece 給的CRUD不一樣,
所以我們要先給他路徑,

  resource :users ,except: [:show, :destroy] do
    collection do 
      get :login
      post :logining
      post :logout
    end
  end

然後幫他製作 login 的頁面,
login.html.erb
這裡的 form_with 不需要給他 model,
用 scope 代替就可以有 user 的前綴,
因為我們不是要 new 東西,也要另外給他路徑。

<%= form_with(scope: :user,
              url: logining_users_path,
              data: { turbo: false }) do |f| %>
  <div>
    <%= f.label :email%>
    <%= f.email_field :email%>
  </div>

  <div>
    <%= f.label :password%>
    <%= f.password_field :password%>
  </div>

  <%= f.submit '登入' %>
<% end %>

然後是 controller
這裡就是要判斷,使用者輸入的信箱密碼
是否有存在,
永遠要預計使用者會有很奇怪的舉動,
所以我們第一層要先判斷是否有填帳號跟密碼,
然後再去查詢是否有這個帳號密碼,來判斷他是否登入成功,

  def login
  end

  def logining
    email = params[:user][:email]
    password = params[:user][:password]

    if email.present? or password.present?
      user = User.find_by(email: ,password:)
      redirect_to root_path, notice: '登入成功'
    else
      redirect_to login_users_path, alert: '登入失敗'
    end
  end

登入之後,伺服器端需要判斷你是不是擁有這個帳號的,
在輸入正確的帳號密碼之後,要如何保持這個身分呢?
這時候就需要給成功登入的人發一個「身分證」!

Session

這個身分證呢就是 「Session」,
Session 是 Web 開發中常用的概念,用於在伺服器和客戶端之間存儲和管理特定用戶的資訊。
它允許應用程式在一連串的 HTTP 請求中保留用戶的狀態資訊,通常用於儲存登入狀態、購物車內容、用戶設定等。Session 是一種伺服器端的技術,資訊被儲存在伺服器上。
下面是 Session 的一些重要特點和相關概念:

  1. 狀態保持: Session 可以用來保持用戶的狀態,使得伺服器可以識別用戶並在多個 HTTP 請求之間保留相關資訊。
  2. 資訊儲存: Session 可以儲存各種類型的資訊,例如文字、數字、物件等,以及用戶相關的資訊,如登入狀態、用戶設定、購物車內容等。
  3. 唯一識別: 每個用戶都有唯一的識別符號(Session ID),它通常儲存在 cookie 中,也可以透過 URL 或其他方式傳遞。
  4. 安全性考慮: Session 中儲存的資訊可以是敏感的,因此需要確保妥善處理和保護,以避免安全漏洞。

那還有一種儲存用戶訊息的大家應該都聽過,叫做 cookie
是瀏覽網站時由網路伺服器建立並由網頁瀏覽器存放在使用者電腦或其他裝置的小文字檔案。
在面試的時候,有被問到 Session 跟 Cookie 有什麼區別?
我主要列兩點:
1.位置存儲
Cookie 會存儲在瀏覽器裡面,而 Session 是存儲在伺服器端的。
2.安全性:
Cookie:可能存在安全風險,因為資訊存儲在客戶端,可以被修改或竊取。
Session:資訊存儲於伺服器端,相對較安全,用戶無法直接修改 Session 資料。

明天再來繼續 Session 的部分。


上一篇
Rails 手工打造自己的部落格 20-會員系統
下一篇
Rails 手工打造自己的部落格 22 會員登入(下)
系列文
Rails 手工打造自己的部落格 30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言